From: Carlos Garnacho Date: Wed, 30 Aug 2023 08:14:16 +0000 (+0200) Subject: st: Drop explicit Clutter grab in StButton X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~320^2^2~29 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=52182e6493d047dca4a95b4ecda5856a7c86d4f1;p=gnome-shell.git st: Drop explicit Clutter grab in StButton Nowadays, Clutter knows what an implicit grab is, which gives us already the feel that we are after with buttons (e.g. press and drag on the button will not enter other actors meanwhile). ClutterGrab was only added to provide that feel meanwhile, and it's also slightly more intense (e.g. altering keyboard focus, or triggering leave events on all parents of the button) which may trigger side effects. An example is the IBus candidates popup, where the pagination buttons may indirectly trigger dismissing of the entire popup when interacted, by stealing the keyboard focus to the client/actor doing IM. Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2497 Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2244 Part-of: --- diff --git a/src/st/st-button.c b/src/st/st-button.c index 687a54d23..a958c1491 100644 --- a/src/st/st-button.c +++ b/src/st/st-button.c @@ -78,7 +78,6 @@ struct _StButtonPrivate ClutterInputDevice *device; ClutterEventSequence *press_sequence; - ClutterGrab *grab; guint button_mask : 3; guint is_toggle : 1; @@ -195,13 +194,6 @@ st_button_button_press (ClutterActor *actor, if (priv->button_mask & mask) { - ClutterActor *stage; - - stage = clutter_actor_get_stage (actor); - - if (priv->grabbed == 0) - priv->grab = clutter_stage_grab (CLUTTER_STAGE (stage), actor); - priv->grabbed |= mask; st_button_press (button, device, mask, NULL); @@ -234,11 +226,6 @@ st_button_button_release (ClutterActor *actor, st_button_release (button, device, mask, is_click ? button_nr : 0, NULL); priv->grabbed &= ~mask; - if (priv->grab && priv->grabbed == 0) - { - clutter_grab_dismiss (priv->grab); - g_clear_pointer (&priv->grab, clutter_grab_unref); - } return TRUE; } @@ -266,7 +253,8 @@ st_button_touch_event (ClutterActor *actor, sequence = clutter_event_get_event_sequence (event); event_type = clutter_event_type (event); - if (event_type == CLUTTER_TOUCH_BEGIN && !priv->grab && !priv->press_sequence) + if (event_type == CLUTTER_TOUCH_BEGIN && + priv->grabbed == 0 && !priv->press_sequence) { st_button_press (button, device, 0, sequence); return CLUTTER_EVENT_STOP; @@ -923,12 +911,6 @@ st_button_fake_release (StButton *button) priv = st_button_get_instance_private (button); - if (priv->grab) - { - clutter_grab_dismiss (priv->grab); - g_clear_pointer (&priv->grab, clutter_grab_unref); - } - priv->grabbed = 0; if (priv->pressed || priv->press_sequence)